package tech.windanchaos.blog.mapper;

import org.apache.ibatis.annotations.Mapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Repository;
import sun.rmi.server.InactiveGroupException;
import tech.windanchaos.blog.entity.*;

import java.util.List;

@Repository
@Mapper
public interface ArticleMapper {
    /**
     * 取分页的博客数据
     *
     * @param start
     * @param limit
     * @return
     */
    List<ArticleDes> getArticlesByPage(Integer start, Integer limit);
    List<ArticleDes> getArticlesByPageAdmin(Integer start, Integer limit);


    /**
     * 全部博客
     *
     * @return
     */
    List<ArticleDes> getAllArticles();

    /**
     * 分类页面
     */
    List<ArticleCategory> getArticleCategoryList();

    /**
     * 归档
     */
    List<ArticleArchive> getArticleArchive(Integer start, Integer limit);

    /**
     * 文章id查文章分类List
     */
    List<Category> getCategoriesByArticleID(Integer id);

    /**
     * 分类id查分类
     */
    Category getCategoryByID(Integer id);

    /**
     * 博客正文
     */
    Article getArticleByID(int id);

    /**
     * 通过分类id查询文章列表
     */
    List<ArticleDes> getArticleDesByCategoryID(Integer id);

    /**
     * 标签页面
     */
    List<ArticleTag> getArticleTagList();

    /**
     * 通过标签ID查询标签文章List
     */
    List<ArticleDes> getArticleDesByTagID(Integer id);

    /**
     * 标签id查标签
     */
    Tag getTagByID(Integer id);

    /**
     * 返回所有的分类
     */
    List<Category> getAllCategory();
    /**
     * 搜索文章
     * 这里考虑了文章---分类的一对多情况
     */
    List<ArticleDes> searchBlogByCategoryIdAndTitle(SearchBody searchBody);

    /**
     * 通过名字查找分类
     */
    Category getCategoryByName(String name);
    /**
     * 添加分类
     */
    void addCategory(String name);
    /**
     * 更新分类
     */
    void updateCategory(Category category);
    /**
     * 删除分类
     */
    void delCategory(Integer id);



    /**
     * 返回所有的标签
     */
    List<Tag> getAllTags();
    /**
     * 通过名字查找分类
     */
    Tag getTagByName(String name);
    /**
     * 添加标签
     */
    void addTag(String name);
    /**
     * 更新标签
     */
    void updateTag(Tag tag);
    /**
     * 删除分类
     */
    void delTag(Integer id);


    /**
     * 后台博客文章相关
     */

    Article getArticleById(Integer id);
    //文章的分类和标签
    List<Category> getArticleCategoryById(Integer id);
    List<Tag> getArticleTagById(Integer id);
    Integer insertArticle(Article article);
    Integer updateArticle(Article article);
    void insertArticleCategory(Integer id,List<Integer> cIds);
    void insertArticleTags(Integer id,List<Integer> tIds);
    void deleteArticleCategory(Integer id);
    void deleteArticleTags(Integer id);
    void deleteArticle(Integer id);

}
